home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!seismo!ut-sally!im4u!rutgers!mit-eddie!uw-beaver!tektronix!tekgen!tekred!games-request
- From: games-request@tekred.TEK.COM
- Newsgroups: comp.sources.games
- Subject: v02i039: dungeon - game of adventure, Part06/14
- Message-ID: <1562@tekred.TEK.COM>
- Date: 1 Sep 87 20:37:38 GMT
- Sender: billr@tekred.TEK.COM
- Lines: 2335
- Approved: billr@tekred.TEK.COM
-
- Submitted by: Bill Randle <games-request@tekred.TEK.COM>
- Comp.sources.games: Volume 2, Issue 39
- Archive-name: dungeon/Part06
-
- [Due to a messup on my part, the first five parts of the
- distribution will say "Part n of 7" when unshared. They are
- really "Part n of 14". Sorry for the inconvenience. -br]
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 6 (of 14)."
- # Contents: History actors.F dgame.F dmain.F dverb1.F np.F np2.F
- # nrooms.F oflags.h speak.F
- # Wrapped by billr@tekred on Tue Apr 21 10:24:34 1987
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f History -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"History\"
- else
- echo shar: Extracting \"History\" \(4401 characters\)
- sed "s/^X//" >History <<'END_OF_History'
- X History of the Unix f77 Implementation of Dungeon
- X =================================================
- X
- XThis version of dungeon has been modified from the original source
- Xso that it will compile and execute on Unix[TM] Systems using the
- Xf77 FORTRAN Compiler. The original was written in DEC FORTRAN,
- Xtranslated from MDL. See the file "dungeon.doc" for the complete
- Xoriginal documentation. See the file "PDP.doc" for notes on the
- XUnix/pdp implementation.
- X
- XI. From the original documentation...
- X
- XTo: Dungeon Players
- XFrom: "The Translator"
- XSubj: Game Information
- XDate: 8-OCT-80
- X
- X
- XThis is the first (and last) source release of the PDP-11 version of
- XDungeon.
- X
- XPlease note that Dungeon has been superceded by the game ZORK(tm).
- XThe following is an extract from the new product announcement for
- XZORK in the September, 1980 issue of the RT-11 SIG newsletter:
- X
- X "'ZORK: The Great Underground Empire - Part I' ...was developed
- X by the original authors based on their ZORK (Dungeon) game for
- X the PDP-10. It features a greatly improved parser; command
- X input and transcript output files; SAVEs to any device and
- X file name; and adaptation to different terminal types,
- X including a status line on VT100s. Note: this is not the
- X FORTRAN version that has been available through DECUS. This
- X version has been completely rewritten to run efficiently on
- X small machines - up to 10 times as fast as the DECUS version.
- X
- X ...ZORK runs under RT-ll, HT-ll, or RSTS/E and requires as
- X little as 20K words of memory and a single floppy disk drive.
- X The game package, consisting of an RX01-format diskette and
- X an instruction booklet, is available from Infocom, Inc.,
- X P.O. Box 120, Kendall Station, Cambridge, Ma. 02142."
- X
- XZORK(tm) is a trademark of Infocom, Inc. It is available for several
- Xpopular personal computers as well as for the PDP-ll.
- X
- X
- XSUMMARY
- X-------
- X
- X Welcome to Dungeon!
- X
- X Dungeon is a game of adventure, danger, and low cunning. In it
- Xyou will explore some of the most amazing territory ever seen by mortal
- Xman. Hardened adventurers have run screaming from the terrors contained
- Xwithin.
- X
- X In Dungeon, the intrepid explorer delves into the forgotten secrets
- Xof a lost labyrinth deep in the bowels of the earth, searching for
- Xvast treasures long hidden from prying eyes, treasures guarded by
- Xfearsome monsters and diabolical traps!
- X
- X No DECsystem should be without one!
- X
- X Dungeon was created at the Programming Technology Division of the MIT
- XLaboratory for Computer Science by Tim Anderson, Marc Blank, Bruce
- XDaniels, and Dave Lebling. It was inspired by the Adventure game of
- XCrowther and Woods, and the Dungeons and Dragons game of Gygax
- Xand Arneson. The original version was written in MDL (alias MUDDLE).
- XThe current version was translated from MDL into FORTRAN IV by
- Xa somewhat paranoid DEC engineer who prefers to remain anonymous.
- X
- X On-line information may be obtained with the commands HELP and INFO.
- X
- XII. DEC FORTRAN to f77 Conversion (17-nov-81)
- X
- XThe conversion from DEC FORTRAN to Unix f77 was done by Randy Dietrich,
- XLynn Cochran and Sig Peterson. Much hacking was done to get it to fit
- Xin the limited address space of a PDP-11/44 (split I/D). See the
- Xfile "PDP.doc" for all the gory details. Suffice it to say that by
- Xleaving out the debugging package and not linking in the f77 i/o
- Xlibrary they managed to get it to run.
- X
- XIII. PDP to VAX (dec-85)
- X
- XBased on the work of Randy, Lynn and Sig, Bill Randle folded in the
- Xfull save/restore functions and the game debugging package (gdt) into
- Xthe pdp version to create a Vax/Unix version. This version also uses
- Xf77 i/o, thus eliminating the extra speak and listen processes needed
- Xon the pdp.
- X
- XIV. Cleanup I (11-dec-86)
- X
- XJohn Gilmore (hoptoad!gnu) cleaned up the source files by moving
- Xmost of the common declarations into include files and added
- Xcomments from the original (FORTRAN or MDL?) source. His efforts
- Xare greatly appreciated.
- X
- XV. Cleanup II (9-feb-87)
- X
- XBill Randle (billr@tekred.tek.com) added the pdp dependencies back
- Xinto the Vax source files with #ifdefs in order to have just one
- Xset of sources. Previously, there were two sets of source: one for
- Xthe pdp and one for the Vax. In addition, a shell escape of the
- Xform !cmd was added and the wizard can enter the gdt without having
- Xto recompile the source. Finally, a man page was generated, based
- Xon the dungeon.doc file.
- END_OF_History
- if test 4401 -ne `wc -c <History`; then
- echo shar: \"History\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f actors.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"actors.F\"
- else
- echo shar: Extracting \"actors.F\" \(6949 characters\)
- sed "s/^X//" >actors.F <<'END_OF_actors.F'
- XC AAPPLI- APPLICABLES FOR ADVENTURERS
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION AAPPLI(RI)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL F,MOVETO
- X#include "parser.h"
- X#include "gamestate.h"
- X#include "rooms.h"
- X#include "rflag.h"
- X#include "rindex.h"
- X#include "xsrch.h"
- X#include "objects.h"
- X#include "oflags.h"
- X#include "oindex.h"
- X#include "clock.h"
- X#include "advers.h"
- X#include "verbs.h"
- X#include "flags.h"
- XC AAPPLI, PAGE 2
- XC
- X IF(RI.EQ.0) GO TO 10
- XC !IF ZERO, NO APP.
- X AAPPLI=.TRUE.
- XC !ASSUME WINS.
- X GO TO (1000,2000),RI
- XC !BRANCH ON ADV.
- X CALL BUG(11,RI)
- XC
- XC COMMON FALSE RETURN.
- XC
- X10 AAPPLI=.FALSE.
- X RETURN
- XC
- XC A1-- ROBOT. PROCESS MOST COMMANDS GIVEN TO ROBOT.
- XC
- X1000 IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
- X CFLAG(CEVSPH)=.FALSE.
- XC !ROBOT RAISED CAGE.
- X WINNER=PLAYER
- XC !RESET FOR PLAYER.
- X F=MOVETO(CAGER,WINNER)
- XC !MOVE TO NEW ROOM.
- X CALL NEWSTA(CAGE,567,CAGER,0,0)
- XC !INSTALL CAGE IN ROOM.
- X CALL NEWSTA(ROBOT,0,CAGER,0,0)
- XC !INSTALL ROBOT IN ROOM.
- X AROOM(AROBOT)=CAGER
- XC !ALSO MOVE ROBOT/ADV.
- X CAGESF=.TRUE.
- XC !CAGE SOLVED.
- X OFLAG1(ROBOT)=and(OFLAG1(ROBOT),not(NDSCBT))
- X OFLAG1(SPHER)=or(OFLAG1(SPHER),TAKEBT)
- X RETURN
- XC
- X1200 IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
- X CALL RSPEAK(568)
- XC !EAT OR DRINK, JOKE.
- X RETURN
- XC
- X1300 IF(PRSA.NE.READW) GO TO 1400
- XC !READ,
- X CALL RSPEAK(569)
- XC !JOKE.
- X RETURN
- XC
- X1400 IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW)
- X& .OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW)
- X& .OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10
- X CALL RSPEAK(570)
- XC !JOKE.
- X RETURN
- XC AAPPLI, PAGE 3
- XC
- XC A2-- MASTER. PROCESS MOST COMMANDS GIVEN TO MASTER.
- XC
- X2000 IF(and(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100
- X CALL RSPEAK(783)
- XC !NO MASTER YET.
- X RETURN
- XC
- X2100 IF(PRSA.NE.WALKW) GO TO 2200
- XC !WALK?
- X I=784
- XC !ASSUME WONT.
- X IF(((HERE.EQ.SCORR).AND.
- X& ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
- X& ((HERE.EQ.NCORR).AND.
- X& ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
- X& I=785
- X CALL RSPEAK(I)
- X RETURN
- XC
- X2200 IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR.
- X& (PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR.
- X& (PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR.
- X& (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR.
- X& (PRSA.EQ.KILLW)) GO TO 10
- X CALL RSPEAK(786)
- XC !MASTER CANT DO IT.
- X RETURN
- XC
- X END
- XC THIEFD- INTERMOVE THIEF DEMON
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE THIEFD
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
- X#include "gamestate.h"
- XC
- X#include "debug.h"
- X#include "rooms.h"
- X#include "rflag.h"
- X#include "rindex.h"
- X#include "objects.h"
- X#include "oflags.h"
- X#include "oindex.h"
- X#include "villians.h"
- X#include "flags.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))
- XC THIEFD, PAGE 2
- XC
- X#ifdef debug
- X DFLAG=and(PRSFLG, 32768).NE.0
- X#endif debug
- XC !SET UP DETAIL FLAG.
- X ONCE=.FALSE.
- XC !INIT FLAG.
- X1025 RHERE=OROOM(THIEF)
- XC !VISIBLE POS.
- X IF(RHERE.NE.0) THFPOS=RHERE
- XC
- X IF(THFPOS.EQ.HERE) GO TO 1100
- XC !THIEF IN WIN RM?
- X IF(THFPOS.NE.TREAS) GO TO 1400
- XC !THIEF NOT IN TREAS?
- XC
- XC THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
- XC
- X#ifdef debug
- X IF(DFLAG) PRINT 10
- X10 FORMAT(' THIEFD-- IN TREASURE ROOM')
- X#endif debug
- X IF(RHERE.EQ.0) GO TO 1050
- XC !VISIBLE?
- X CALL NEWSTA(THIEF,0,0,0,0)
- XC !YES, VANISH.
- X RHERE=0
- X IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
- X1050 I=ROBADV(-THIEF,THFPOS,0,0)
- XC !DROP VALUABLES.
- X IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=or(OFLAG2(EGG),OPENBT)
- X GO TO 1700
- XC
- XC THIEF AND WINNER IN SAME ROOM.
- XC
- X1100 IF(THFPOS.EQ.TREAS) GO TO 1700
- XC !IF TREAS ROOM, NOTHING.
- X IF(and(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400
- X#ifdef debug
- X IF(DFLAG) PRINT 20
- X20 FORMAT(' THIEFD-- IN ADV ROOM')
- X#endif debug
- X IF(THFFLG) GO TO 1300
- XC !THIEF ANNOUNCED?
- X IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150
- XC !IF INVIS AND 30%.
- X IF(OCAN(STILL).NE.THIEF) GO TO 1700
- XC !ABORT IF NO STILLETTO.
- X CALL NEWSTA(THIEF,583,THFPOS,0,0)
- XC !INSERT THIEF INTO ROOM.
- X THFFLG=.TRUE.
- XC !THIEF IS ANNOUNCED.
- X RETURN
- XC
- X1150 IF((RHERE.EQ.0).OR.(and(OFLAG2(THIEF),FITEBT).EQ.0))
- X& GO TO 1200
- X IF(WINNIN(THIEF,WINNER)) GO TO 1175
- XC !WINNING?
- X CALL NEWSTA(THIEF,584,0,0,0)
- XC !NO, VANISH THIEF.
- X OFLAG2(THIEF)=and(OFLAG2(THIEF), not(FITEBT))
- X IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
- X RETURN
- XC
- X1175 IF(PROB(90,90)) GO TO 1700
- XC !90% CHANCE TO STAY.
- XC
- X1200 IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250
- XC !IF VISIBLE AND 30%
- X CALL NEWSTA(THIEF,585,0,0,0)
- XC !VANISH THIEF.
- X IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
- X RETURN
- XC
- X1300 IF(RHERE.EQ.0) GO TO 1700
- XC !ANNOUNCED. VISIBLE?
- X1250 IF(PROB(70,70)) RETURN
- XC !70% CHANCE TO DO NOTHING.
- X THFFLG=.TRUE.
- X NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
- X I=586
- XC !ROBBED EM.
- X IF(RHERE.NE.0) I=588
- XC !WAS HE VISIBLE?
- X IF(NR.NE.0) I=I+1
- XC !DID HE GET ANYTHING?
- X CALL NEWSTA(THIEF,I,0,0,0)
- XC !VANISH THIEF.
- X IF(QSTILL(THFPOS))
- X& CALL NEWSTA(STILL,0,0,THIEF,0)
- X IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
- X RHERE=0
- X GO TO 1700
- XC !ONWARD.
- XC
- XC NOT IN ADVENTURERS ROOM.
- XC
- X1400 CALL NEWSTA(THIEF,0,0,0,0)
- XC !VANISH.
- X RHERE=0
- X#ifdef debug
- X IF(DFLAG) PRINT 30,THFPOS
- X30 FORMAT(' THIEFD-- IN ROOM ',I4)
- X#endif debug
- X IF(QSTILL(THFPOS))
- X& CALL NEWSTA(STILL,0,0,THIEF,0)
- X IF(and(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700
- X I=ROBRM(THFPOS,75,0,0,-THIEF)
- XC !ROB ROOM 75%.
- X IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
- X& (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
- X DO 1450 I=1,OLNT
- XC !BOTH IN MAZE.
- X IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
- X& (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
- X& GO TO 1450
- X CALL RSPSUB(590,ODESC2(I))
- XC !TAKE OBJECT.
- X IF(PROB(40,20)) GO TO 1700
- X CALL NEWSTA(I,0,0,0,-THIEF)
- XC !MOST OF THE TIME.
- X OFLAG2(I)=or(OFLAG2(I),TCHBT)
- X GO TO 1700
- X1450 CONTINUE
- X GO TO 1700
- XC
- X1500 DO 1550 I=1,OLNT
- XC !NOT IN MAZE.
- X IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
- X& (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
- X& GO TO 1550
- X CALL NEWSTA(I,0,0,0,-THIEF)
- X OFLAG2(I)=or(OFLAG2(I),TCHBT)
- X GO TO 1700
- X1550 CONTINUE
- XC
- XC NOW MOVE TO NEW ROOM.
- XC
- X1700 IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
- X IF(ONCE) GO TO 1800
- X ONCE=.NOT.ONCE
- X1750 THFPOS=THFPOS-1
- XC !NEXT ROOM.
- X IF(THFPOS.LE.0) THFPOS=RLNT
- X IF(and(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND)
- X& GO TO 1750
- X THFFLG=.FALSE.
- XC !NOT ANNOUNCED.
- X GO TO 1025
- XC !ONCE MORE.
- XC
- XC ALL DONE.
- XC
- X1800 IF(THFPOS.EQ.TREAS) RETURN
- XC !IN TREASURE ROOM?
- X J=591
- XC !NO, DROP STUFF.
- X IF(THFPOS.NE.HERE) J=0
- X DO 1850 I=1,OLNT
- X IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
- X& (OTVAL(I).GT.0)) GO TO 1850
- X CALL NEWSTA(I,J,THFPOS,0,0)
- X J=0
- X1850 CONTINUE
- X RETURN
- XC
- X END
- END_OF_actors.F
- if test 6949 -ne `wc -c <actors.F`; then
- echo shar: \"actors.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f dgame.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"dgame.F\"
- else
- echo shar: Extracting \"dgame.F\" \(4492 characters\)
- sed "s/^X//" >dgame.F <<'END_OF_dgame.F'
- XC GAME- MAIN COMMAND LOOP FOR DUNGEON
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE GAME
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL RMDESC,VAPPLI,RAPPLI,AAPPLI
- X LOGICAL F,PARSE,FINDXT,XVEHIC,LIT
- X CHARACTER SECHO(4)
- X CHARACTER GDTSTR(3)
- X#include "parser.h"
- X#include "gamestate.h"
- X#include "state.h"
- X#include "io.h"
- X#include "rooms.h"
- X#include "rindex.h"
- X#include "objects.h"
- X#include "oflags.h"
- X#include "oindex.h"
- X#include "advers.h"
- X#include "verbs.h"
- X#include "flags.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X DATA SECHO/'E','C','H','O'/
- X DATA GDTSTR/'G','D','T'/
- XC GAME, PAGE 2
- XC
- XC START UP, DESCRIBE CURRENT LOCATION.
- XC
- X CALL RSPEAK(1)
- XC !WELCOME ABOARD.
- X F=RMDESC(3)
- XC !START GAME.
- XC
- XC NOW LOOP, READING AND EXECUTING COMMANDS.
- XC
- X100 WINNER=PLAYER
- XC !PLAYER MOVING.
- X TELFLG=.FALSE.
- XC !ASSUME NOTHING TOLD.
- X IF(PRSCON.LE.1) CALL RDLINE(INBUF,INLNT,1)
- XC
- X DO 150 I=1,3
- XC !CALL ON GDT?
- X IF(INBUF(I+PRSCON-1).NE.GDTSTR(I)) GO TO 200
- X150 CONTINUE
- X CALL GDT
- XC !YES, INVOKE.
- X GO TO 100
- XC !ONWARD.
- XC
- X200 MOVES=MOVES+1
- X PRSWON=PARSE(INBUF,INLNT,.TRUE.)
- X IF(.NOT.PRSWON) GO TO 400
- XC !PARSE LOSES?
- X IF(XVEHIC(1)) GO TO 400
- XC !VEHICLE HANDLE?
- XC
- X IF(PRSA.EQ.TELLW) GO TO 2000
- XC !TELL?
- X300 IF((PRSO.EQ.VALUA).OR.(PRSO.EQ.EVERY)) GO TO 900
- X IF(.NOT.VAPPLI(PRSA)) GO TO 400
- XC !VERB OK?
- X350 IF(.NOT.ECHOF.AND.(HERE.EQ.ECHOR)) GO TO 1000
- X F=RAPPLI(RACTIO(HERE))
- XC
- X400 CALL XENDMV(TELFLG)
- XC !DO END OF MOVE.
- X IF(.NOT.LIT(HERE)) PRSCON=1
- X GO TO 100
- XC
- X900 CALL VALUAC(VALUA)
- X GO TO 350
- XC GAME, PAGE 3
- XC
- XC SPECIAL CASE-- ECHO ROOM.
- XC IF INPUT IS NOT 'ECHO' OR A DIRECTION, JUST ECHO.
- XC
- X1000 CALL RDLINE(INBUF,INLNT,0)
- X MOVES=MOVES+1
- XC !CHARGE FOR MOVES.
- X DO 1100 I=1,4
- XC !INPUT = ECHO?
- X IF(INBUF(I).NE.SECHO(I)) GO TO 1300
- X1100 CONTINUE
- XC
- XC Note: the following DO loop was changed from DO 1200 I=5,78
- XC The change was necessary because the RDLINE function was changed,
- XC and no longer provides a 78 character buffer padded with blanks.
- XC
- X DO 1200 I=5,INLNT
- X IF(INBUF(I).NE.' ') GO TO 1300
- X1200 CONTINUE
- XC
- X CALL RSPEAK(571)
- XC !KILL THE ECHO.
- X ECHOF=.TRUE.
- X OFLAG2(BAR)=and(OFLAG2(BAR), not(SCRDBT))
- X PRSWON=.TRUE.
- XC !FAKE OUT PARSER.
- X PRSCON=1
- XC !FORCE NEW INPUT.
- X GO TO 400
- XC
- X1300 PRSWON=PARSE(INBUF,INLNT,.FALSE.)
- X IF(.NOT.PRSWON .OR. (PRSA.NE.WALKW))
- X& GO TO 1400
- X IF(FINDXT(PRSO,HERE)) GO TO 300
- XC !VALID EXIT?
- XC
- X#ifdef PDP
- X1400 call outstr(INLINE, INLNT)
- X#else
- X1400 WRITE(OUTCH,1410) (INBUF(J),J=1,INLNT)
- X1410 FORMAT(1X,78A1)
- X#endif PDP
- X TELFLG=.TRUE.
- XC !INDICATE OUTPUT.
- X GO TO 1000
- XC !MORE ECHO ROOM.
- XC GAME, PAGE 4
- XC
- XC SPECIAL CASE-- TELL <ACTOR>, NEW COMMAND
- XC NOTE THAT WE CANNOT BE IN THE ECHO ROOM.
- XC
- X2000 IF(and(OFLAG2(PRSO),ACTRBT).NE.0) GO TO 2100
- X CALL RSPEAK(602)
- XC !CANT DO IT.
- X GO TO 350
- XC !VAPPLI SUCCEEDS.
- XC
- X2100 WINNER=OACTOR(PRSO)
- XC !NEW PLAYER.
- X HERE=AROOM(WINNER)
- XC !NEW LOCATION.
- X IF(PRSCON.LE.1) GO TO 2700
- XC !ANY INPUT?
- X IF(PARSE(INBUF,INLNT,.TRUE.)) GO TO 2150
- X2700 I=341
- XC !FAILS.
- X IF(TELFLG) I=604
- XC !GIVE RESPONSE.
- X CALL RSPEAK(I)
- X2600 WINNER=PLAYER
- XC !RESTORE STATE.
- X HERE=AROOM(WINNER)
- X GO TO 350
- XC
- X2150 IF(AAPPLI(AACTIO(WINNER))) GO TO 2400
- XC !ACTOR HANDLE?
- X IF(XVEHIC(1)) GO TO 2400
- XC !VEHICLE HANDLE?
- X IF((PRSO.EQ.VALUA).OR.(PRSO.EQ.EVERY)) GO TO 2900
- X IF(.NOT.VAPPLI(PRSA)) GO TO 2400
- XC !VERB HANDLE?
- X2350 F=RAPPLI(RACTIO(HERE))
- XC
- X2400 CALL XENDMV(TELFLG)
- XC !DO END OF MOVE.
- X GO TO 2600
- XC !DONE.
- XC
- X2900 CALL VALUAC(VALUA)
- XC !ALL OR VALUABLES.
- X GO TO 350
- XC
- X END
- XC XENDMV- EXECUTE END OF MOVE FUNCTIONS.
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE XENDMV(FLAG)
- X IMPLICIT INTEGER(A-Z)
- X LOGICAL F,CLOCKD,FLAG,XVEHIC
- X#include "parser.h"
- X#include "villians.h"
- XC
- X IF(.NOT.FLAG) CALL RSPEAK(341)
- XC !DEFAULT REMARK.
- X IF(THFACT) CALL THIEFD
- XC !THIEF DEMON.
- X IF(PRSWON) CALL FIGHTD
- XC !FIGHT DEMON.
- X IF(SWDACT) CALL SWORDD
- XC !SWORD DEMON.
- X IF(PRSWON) F=CLOCKD(X)
- XC !CLOCK DEMON.
- X IF(PRSWON) F=XVEHIC(2)
- XC !VEHICLE READOUT.
- X RETURN
- X END
- XC XVEHIC- EXECUTE VEHICLE FUNCTION
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION XVEHIC(N)
- X IMPLICIT INTEGER(A-Z)
- X LOGICAL OAPPLI
- X#include "gamestate.h"
- X#include "objects.h"
- X#include "advers.h"
- XC
- X XVEHIC=.FALSE.
- XC !ASSUME LOSES.
- X AV=AVEHIC(WINNER)
- XC !GET VEHICLE.
- X IF(AV.NE.0) XVEHIC=OAPPLI(OACTIO(AV),N)
- X RETURN
- X END
- END_OF_dgame.F
- if test 4492 -ne `wc -c <dgame.F`; then
- echo shar: \"dgame.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f dmain.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"dmain.F\"
- else
- echo shar: Extracting \"dmain.F\" \(6633 characters\)
- sed "s/^X//" >dmain.F <<'END_OF_dmain.F'
- XC DUNGEON-- MAIN PROGRAM
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- X PROGRAM DUNGEO
- XC
- XC DECLARATIONS
- XC
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL INIT
- X#include "parser.h"
- X#include "gamestate.h"
- X#include "state.h"
- X#include "screen.h"
- X#include "puzzle.h"
- XC
- XC MISCELLANEOUS VARIABLES
- XC
- X CHARACTER VEDIT
- X COMMON /STAR/ MBASE,STRBIT
- X COMMON /VERS/ VMAJ,VMIN,VEDIT
- X COMMON /BATS/ BATDRP(9)
- X#include "io.h"
- X#include "debug.h"
- X COMMON /HYPER/ HFACTR
- X#include "rooms.h"
- X#include "rflag.h"
- X#include "rindex.h"
- X#include "exits.h"
- X#include "curxt.h"
- X#include "xpars.h"
- X#include "xsrch.h"
- X#include "objects.h"
- X#include "oflags.h"
- X#include "oindex.h"
- X#include "clock.h"
- X
- X#include "villians.h"
- X#include "advers.h"
- X#include "verbs.h"
- X#include "flags.h"
- XC DUNGEON, PAGE 2
- XC
- XC DATA STATEMENTS FOR CONSTANT ARRAYS
- XC
- X DATA VMAJ/2/,VMIN/6/,VEDIT/'A'/
- XC
- X DATA SDIR/o'40000'/,SIND/o'20000'/,SSTD/o'10000'/,
- X& SFLIP/o'4000'/,SDRIV/o'2000'/,SVMASK/o'777'/
- X DATA VABIT/o'40000'/,VRBIT/o'20000'/,VTBIT/o'10000'/,
- X& VCBIT/o'4000'/,VEBIT/o'2000'/,VFBIT/o'1000'/,
- X& VPMASK/o'777'/
- XC
- X DATA BATDRP/66,67,68,69,70,71,72,65,73/
- XC
- X DATA SCOLDR/o'2000',153,o'12000',154,o'6000',152,o'16000',151/
- X DATA SCOLWL/151,207,o'6000',152,208,o'16000',
- X& 153,206,o'12000',154,205,o'2000'/
- XC
- X DATA HFACTR/500/
- XC
- X DATA CPDR/o'2000',-8,o'4000',-7,o'6000',1,o'10000',9,
- X& o'12000',8,o'14000',7,o'16000',-1,o'20000',-9/
- X DATA CPWL/205,-8,206,8,207,1,208,-1/
- X DATA CPVEC/1,1,1,1,1,1,1,1,
- X& 1,0,-1,0,0,-1,0,1,
- X& 1,-1,0,1,0,-2,0,1,
- X& 1,0,0,0,0,1,0,1,
- X& 1,-3,0,0,-1,-1,0,1,
- X& 1,0,0,-1,0,0,0,1,
- X& 1,1,1,0,0,0,1,1,
- X& 1,1,1,1,1,1,1,1/
- XC
- X DATA CEVCUR/1/,CEVMNT/2/,CEVLNT/3/,CEVMAT/4/,
- X& CEVCND/5/,CEVBAL/6/,CEVBRN/7/,CEVFUS/8/,
- X& CEVLED/9/,CEVSAF/10/,CEVVLG/11/,CEVGNO/12/,
- X& CEVBUC/13/,CEVSPH/14/,CEVEGH/15/,
- X& CEVFOR/16/,CEVSCL/17/,CEVZGI/18/,CEVZGO/19/,
- X& CEVSTE/20/,CEVMRS/21/,CEVPIN/22/,CEVINQ/23/,
- X& CEVFOL/24/
- XC
- X DATA XRMASK/o'377'/,XDMASK/o'76000'/,XFMASK/3/
- X DATA XFSHFT/256/,XASHFT/256/
- X DATA XNORM/1/,XNO/2/,XCOND/3/,XDOOR/4/
- X DATA XELNT/1,2,3,3/,XLFLAG/o'100000'/
- X DATA XMIN/o'2000'/,XMAX/o'40000'/,XUP/o'22000'/,XDOWN/o'24000'/
- X DATA XNORTH/o'2000'/,XSOUTH/o'12000'/,XENTER/o'32000'/,
- X& XEXIT/o'34000'/
- X DATA XEAST/o'6000'/,XWEST/o'16000'/
- XC
- X DATA PLAYER/1/,AROBOT/2/,AMASTR/3/
- X DATA ASTAG/o'100000'/
- XC
- X DATA RSEEN/o'100000'/,RLIGHT/o'40000'/,RLAND/o'20000'/
- X DATA RWATER/o'10000'/,RAIR/o'4000'/,RSACRD/o'2000'/,
- X& RFILL/o'1000'/
- X DATA RMUNG/o'400'/,RBUCK/o'200'/,RHOUSE/o'100'/,
- X& RNWALL/o'40'/,REND/o'20'/
- XC
- X DATA WHOUS/2/,LROOM/8/,CELLA/9/
- X DATA MTROL/10/,MAZE1/11/
- X DATA MGRAT/25/,MAZ15/30/
- X DATA FORE1/31/,FORE3/33/,CLEAR/36/,RESER/40/
- X DATA STREA/42/,EGYPT/44/,ECHOR/49/
- X DATA TSHAF/61/
- X DATA BSHAF/76/,MMACH/77/,DOME/79/,MTORC/80/
- X DATA CAROU/83/
- X DATA RIDDL/91/,LLD2/94/,TEMP1/96/,TEMP2/97/,MAINT/100/
- X DATA MCYCL/101/,BLROO/102/,TREAS/103/,RIVR1/107/,RIVR2/108/
- X DATA RIVR3/109/
- X DATA RIVR4/112/,RIVR5/113/,FCHMP/114/,MBARR/119/,FALLS/120/
- X DATA MRAIN/121/,POG/122/,VLBOT/126/,VAIR1/127/,VAIR2/128/
- X DATA VAIR3/129/,VAIR4/130/
- X DATA LEDG2/131/,LEDG3/132/,LEDG4/133/,MSAFE/135/,CAGER/140/
- X DATA CAGED/141/,TWELL/142/,BWELL/143/,ALICE/144/,ALISM/145/
- X DATA ALITR/146/,MTREE/147/,BKENT/148/
- X DATA BKVW/151/,BKTWI/153/,BKVAU/154/,BKBOX/155/
- X DATA CRYPT/157/,TSTRS/158/,MRANT/159/
- X DATA MREYE/160/,MRA/161/,MRB/162/,MRC/163/,MRG/164/
- X DATA MRD/165/,FDOOR/166/,MRAE/167/
- X DATA MRCE/171/,MRCW/172/,MRGE/173/,MRGW/174/,MRDW/176/
- X DATA INMIR/177/,SCORR/179/
- X DATA NCORR/182/,PARAP/183/,CELL/184/,PCELL/185/,NCELL/186/
- X DATA CPANT/188/,CPOUT/189/
- X DATA CPUZZ/190/
- XC
- X DATA CINTW/1/,DEADXW/2/,FRSTQW/3/,INXW/4/
- X DATA OUTXW/5/,WALKIW/6/,FIGHTW/7/,FOOW/8/
- XC
- X DATA READW/100/,MELTW/101/
- X DATA INFLAW/102/,DEFLAW/103/,ALARMW/104/,EXORCW/105/
- X DATA PLUGW/106/,KICKW/107/,WAVEW/108/,RAISEW/109/,LOWERW/110/
- X DATA RUBW/111/,PUSHW/112/,UNTIEW/113/,TIEW/114/,TIEUPW/115/
- X DATA TURNW/116/,BREATW/117/,KNOCKW/118/,LOOKW/119/
- X DATA EXAMIW/120/,SHAKEW/121/,MOVEW/122/,TRNONW/123/,TRNOFW/124/
- X DATA OPENW/125/,CLOSEW/126/,FINDW/127/,WAITW/128/,SPINW/129/
- X DATA BOARDW/130/,UNBOAW/131/,TAKEW/132/,INVENW/133/
- X DATA FILLW/134/,EATW/135/,DRINKW/136/,BURNW/137/
- X DATA MUNGW/138/,KILLW/139/,ATTACW/141/
- X DATA SWINGW/140/,WALKW/142/,TELLW/143/,PUTW/144/
- X DATA DROPW/145/,GIVEW/146/,POURW/147/,THROWW/148/
- XC
- X DATA DIGW/89/,LEAPW/91/,STAYW/73/,FOLLOW/85/
- X DATA HELLOW/151/,LOOKIW/152/,LOOKUW/153/,PUMPW/154/
- X DATA WINDW/155/,CLMBW/156/,CLMBUW/157/,CLMBDW/158/,TRNTOW/159/
- XC
- X DATA VISIBT/o'100000'/,READBT/o'40000'/,TAKEBT/o'20000'/,
- X& DOORBT/o'10000'/,TRANBT/o'4000'/,FOODBT/o'2000'/,
- X& NDSCBT/o'1000'/,DRNKBT/o'400'/, CONTBT/o'200'/,
- X& LITEBT/o'100'/,VICTBT/o'40'/,BURNBT/o'20'/,
- X& FLAMBT/o'10'/,TOOLBT/o'4'/,TURNBT/o'2'/,ONBT/o'1'/
- XC
- X DATA FINDBT/o'100000'/,SLEPBT/o'40000'/,SCRDBT/o'20000'/,
- X& TIEBT/o'10000'/, CLMBBT/o'4000'/,ACTRBT/o'2000'/,
- X& WEAPBT/o'1000'/,FITEBT/o'400'/, VILLBT/o'200'/,
- X& STAGBT/o'100'/,TRYBT/o'40'/,NOCHBT/o'20'/,
- X& OPENBT/o'10'/,TCHBT/o'4'/,VEHBT/o'2'/,SCHBT/o'1'/
- XC
- X DATA GARLI/2/,FOOD/3/,GUNK/4/,COAL/5/,MACHI/7/,DIAMO/8/
- X DATA TCASE/9/,BOTTL/10/
- X DATA WATER/11/,ROPE/12/,KNIFE/13/,SWORD/14/,LAMP/15/,BLAMP/16/
- X DATA RUG/17/,LEAVE/18/,TROLL/19/,AXE/20/
- X DATA RKNIF/21/,KEYS/23/,BAR/26/,ICE/30/
- X DATA COFFI/33/,TORCH/34/,TBASK/35/,FBASK/36/,IRBOX/39/
- X DATA GHOST/42/,TRUNK/45/,BELL/46/,BOOK/47/,CANDL/48/
- X DATA MATCH/51/,TUBE/54/,PUTTY/55/,WRENC/56/,SCREW/57/
- X DATA CYCLO/58/,CHALI/59/
- X DATA THIEF/61/,STILL/62/,WINDO/63/,GRATE/65/,DOOR/66/
- X DATA HPOLE/71/,RBUTT/79/,LEAK/78/,RAILI/75/
- X DATA POT/85/,STATU/86/,IBOAT/87/,DBOAT/88/,PUMP/89/,RBOAT/90/
- X DATA STICK/92/,BUOY/94/,SHOVE/96/,GUANO/97/,BALLO/98/,RECEP/99/
- X DATA BROPE/101/,HOOK1/102/,HOOK2/103/,SAFE/105/,SSLOT/107/
- X DATA BRICK/109/,FUSE/110/
- X DATA GNOME/111/,BLABE/112/,DBALL/113/,TOMB/119/
- X DATA LCASE/123/,CAGE/124/,RCAGE/125/,SPHER/126/,SQBUT/127/
- X DATA FLASK/132/,POOL/133/,SAFFR/134/,BUCKE/137/,ORICE/139/
- X DATA ECAKE/138/,RDICE/140/
- X DATA BLICE/141/,ROBOT/142/,FTREE/145/,BILLS/148/,PORTR/149/
- X DATA SCOL/151/,ZGNOM/152/,EGG/154/,BEGG/155/,BAUBL/156/
- X DATA CANAR/157/,BCANA/158/,YLWAL/159/
- X DATA RDWAL/161/,PINDR/164/
- X DATA RBEAM/171/,ODOOR/172/,QDOOR/173/,CDOOR/175/
- X DATA NUM1/178/
- X DATA NUM8/185/,WARNI/186/,CSLIT/187/,GCARD/188/,STLDR/189/
- X DATA ITOBJ/192/,OPLAY/193/,EVERY/194/
- X DATA VALUA/195/,SAILO/196/,TEETH/197/,WALL/198/
- X DATA HANDS/200/,LUNGS/201/,AVIAT/202/
- X DATA WNORT/205/,GWATE/209/,MASTER/215/
- XC DUNGEON, PAGE 3
- XC
- XC 1) INITIALIZE DATA STRUCTURES
- XC 2) PLAY GAME
- XC
- X IF(INIT(X)) CALL GAME
- XC !IF INIT, PLAY GAME.
- X CALL EXIT
- XC !DONE
- X END
- END_OF_dmain.F
- if test 6633 -ne `wc -c <dmain.F`; then
- echo shar: \"dmain.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f dverb1.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"dverb1.F\"
- else
- echo shar: Extracting \"dverb1.F\" \(6815 characters\)
- sed "s/^X//" >dverb1.F <<'END_OF_dverb1.F'
- XC TAKE-- BASIC TAKE SEQUENCE
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC TAKE AN OBJECT (FOR VERBS TAKE, PUT, DROP, READ, ETC.)
- XC
- X LOGICAL FUNCTION TAKE(FLG)
- XC
- XC DECLARATIONS
- XC
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL FLG,OBJACT,OAPPLI,QOPEN,QHERE
- X#include "parser.h"
- X#include "gamestate.h"
- X#include "state.h"
- X COMMON /STAR/ MBASE,STRBIT
- X#include "objects.h"
- X#include "oflags.h"
- XC
- X#include "advers.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(O)=(and(OFLAG2(O),OPENBT).NE.0)
- XC TAKE, PAGE 2
- XC
- X TAKE=.FALSE.
- XC !ASSUME LOSES.
- X OA=OACTIO(PRSO)
- XC !GET OBJECT ACTION.
- X IF(PRSO.LE.STRBIT) GO TO 100
- XC !STAR?
- X TAKE=OBJACT(X)
- XC !YES, LET IT HANDLE.
- X RETURN
- XC
- X100 X=OCAN(PRSO)
- XC !INSIDE?
- X IF(PRSO.NE.AVEHIC(WINNER)) GO TO 400
- XC !HIS VEHICLE?
- X CALL RSPEAK(672)
- XC !DUMMY.
- X RETURN
- XC
- X400 IF(and(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 500
- X IF(.NOT.OAPPLI(OA,0)) CALL RSPEAK(552+RND(5))
- X RETURN
- XC
- XC OBJECT IS TAKEABLE AND IN POSITION TO BE TAKEN.
- XC
- X500 IF((X.NE.0).OR. QHERE(PRSO,HERE)) GO TO 600
- X IF(OADV(PRSO).EQ.WINNER) CALL RSPEAK(557)
- XC !ALREADY GOT IT?
- X RETURN
- XC
- X600 IF(((X.NE.0).AND.(OADV(X).EQ.WINNER)).OR.
- X& ((WEIGHT(0,PRSO,WINNER)+OSIZE(PRSO)).LE.MXLOAD))
- X& GO TO 700
- X CALL RSPEAK(558)
- XC !TOO MUCH WEIGHT.
- X RETURN
- XC
- X700 TAKE=.TRUE.
- XC !AT LAST.
- X IF(OAPPLI(OA,0)) RETURN
- XC !DID IT HANDLE?
- X CALL NEWSTA(PRSO,0,0,0,WINNER)
- XC !TAKE OBJECT FOR WINNER.
- X OFLAG2(PRSO)=or(OFLAG2(PRSO),TCHBT)
- X CALL SCRUPD(OFVAL(PRSO))
- XC !UPDATE SCORE.
- X OFVAL(PRSO)=0
- XC !CANT BE SCORED AGAIN.
- X IF(FLG) CALL RSPEAK(559)
- XC !TELL TAKEN.
- X RETURN
- XC
- X END
- XC DROP- DROP VERB PROCESSOR
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION DROP(Z)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL F,PUT,OBJACT
- X#include "parser.h"
- X#include "gamestate.h"
- XC
- XC ROOMS
- X#include "rindex.h"
- X#include "objects.h"
- X#include "oflags.h"
- XC
- X#include "advers.h"
- X#include "verbs.h"
- XC DROP, PAGE 2
- XC
- X DROP=.TRUE.
- XC !ASSUME WINS.
- X X=OCAN(PRSO)
- XC !GET CONTAINER.
- X IF(X.EQ.0) GO TO 200
- XC !IS IT INSIDE?
- X IF(OADV(X).NE.WINNER) GO TO 1000
- XC !IS HE CARRYING CON?
- X IF(and(OFLAG2(X),OPENBT).NE.0) GO TO 300
- X CALL RSPSUB(525,ODESC2(X))
- XC !CANT REACH.
- X RETURN
- XC
- X200 IF(OADV(PRSO).NE.WINNER) GO TO 1000
- XC !IS HE CARRYING OBJ?
- X300 IF(AVEHIC(WINNER).EQ.0) GO TO 400
- XC !IS HE IN VEHICLE?
- X PRSI=AVEHIC(WINNER)
- XC !YES,
- X F=PUT(.TRUE.)
- XC !DROP INTO VEHICLE.
- X PRSI=0
- XC !DISARM PARSER.
- X RETURN
- XC !DONE.
- XC
- X400 CALL NEWSTA(PRSO,0,HERE,0,0)
- XC !DROP INTO ROOM.
- X IF(HERE.EQ.MTREE) CALL NEWSTA(PRSO,0,FORE3,0,0)
- X CALL SCRUPD(OFVAL(PRSO))
- XC !SCORE OBJECT.
- X OFVAL(PRSO)=0
- XC !CANT BE SCORED AGAIN.
- X OFLAG2(PRSO)=or(OFLAG2(PRSO),TCHBT)
- XC
- X IF(OBJACT(X)) RETURN
- XC !DID IT HANDLE?
- X I=0
- XC !ASSUME NOTHING TO SAY.
- X IF(PRSA.EQ.DROPW) I=528
- X IF(PRSA.EQ.THROWW) I=529
- X IF((I.NE.0).AND.(HERE.EQ.MTREE)) I=659
- X CALL RSPSUB(I,ODESC2(PRSO))
- X RETURN
- XC
- X1000 CALL RSPEAK(527)
- XC !DONT HAVE IT.
- X RETURN
- XC
- X END
- XC PUT- PUT VERB PROCESSOR
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION PUT(FLG)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL TAKE,QOPEN,QHERE,OBJACT,FLG
- X#include "parser.h"
- X#include "gamestate.h"
- XC
- XC MISCELLANEOUS VARIABLES
- XC
- X COMMON /STAR/ MBASE,STRBIT
- X#include "objects.h"
- X#include "oflags.h"
- X#include "advers.h"
- X#include "verbs.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(R)=((and(OFLAG2(R),OPENBT)).NE.0)
- XC PUT, PAGE 2
- XC
- X PUT=.FALSE.
- X IF((PRSO.LE.STRBIT).AND.(PRSI.LE.STRBIT)) GO TO 200
- X IF(.NOT.OBJACT(X)) CALL RSPEAK(560)
- XC !STAR
- X PUT=.TRUE.
- X RETURN
- XC
- X200 IF((QOPEN(PRSI))
- X& .OR.(and(OFLAG1(PRSI),(DOORBT+CONTBT)).NE.0)
- X& .OR.(and(OFLAG2(PRSI),VEHBT).NE.0)) GO TO 300
- X CALL RSPEAK(561)
- XC !CANT PUT IN THAT.
- X RETURN
- XC
- X300 IF(QOPEN(PRSI)) GO TO 400
- XC !IS IT OPEN?
- X CALL RSPEAK(562)
- XC !NO, JOKE
- X RETURN
- XC
- X400 IF(PRSO.NE.PRSI) GO TO 500
- XC !INTO ITSELF?
- X CALL RSPEAK(563)
- XC !YES, JOKE.
- X RETURN
- XC
- X500 IF(OCAN(PRSO).NE.PRSI) GO TO 600
- XC !ALREADY INSIDE.
- X CALL RSPSB2(564,ODESC2(PRSO),ODESC2(PRSI))
- X PUT=.TRUE.
- X RETURN
- XC
- X600 IF((WEIGHT(0,PRSO,0)+WEIGHT(0,PRSI,0)+OSIZE(PRSO))
- X& .LE.OCAPAC(PRSI)) GO TO 700
- X CALL RSPEAK(565)
- XC !THEN CANT DO IT.
- X RETURN
- XC
- XC NOW SEE IF OBJECT (OR ITS CONTAINER) IS IN ROOM
- XC
- X700 J=PRSO
- XC !START SEARCH.
- X725 IF(QHERE(J,HERE)) GO TO 750
- XC !IS IT HERE?
- X J=OCAN(J)
- X IF(J.NE.0) GO TO 725
- XC !MORE TO DO?
- X GO TO 800
- XC !NO, SCH FAILS.
- XC
- X750 SVO=PRSO
- XC !SAVE PARSER.
- X SVI=PRSI
- X PRSA=TAKEW
- X PRSI=0
- X IF(.NOT.TAKE(.FALSE.)) RETURN
- XC !TAKE OBJECT.
- X PRSA=PUTW
- X PRSO=SVO
- X PRSI=SVI
- X GO TO 1000
- XC
- XC NOW SEE IF OBJECT IS ON PERSON.
- XC
- X800 IF(OCAN(PRSO).EQ.0) GO TO 1000
- XC !INSIDE?
- X IF(QOPEN(OCAN(PRSO))) GO TO 900
- XC !OPEN?
- X CALL RSPSUB(566,ODESC2(PRSO))
- XC !LOSE.
- X RETURN
- XC
- X900 CALL SCRUPD(OFVAL(PRSO))
- XC !SCORE OBJECT.
- X OFVAL(PRSO)=0
- X OFLAG2(PRSO)=or(OFLAG2(PRSO),TCHBT)
- X CALL NEWSTA(PRSO,0,0,0,WINNER)
- XC !TEMPORARILY ON WINNER.
- XC
- X1000 IF(OBJACT(X)) RETURN
- XC !NO, GIVE OBJECT A SHOT.
- X CALL NEWSTA(PRSO,2,0,PRSI,0)
- XC !CONTAINED INSIDE.
- X PUT=.TRUE.
- X RETURN
- XC
- X END
- XC VALUAC- HANDLES VALUABLES/EVERYTHING
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE VALUAC(V)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL LIT,F,F1,TAKE,PUT,DROP,NOTVAL,QHERE
- X#include "parser.h"
- X#include "gamestate.h"
- X#include "objects.h"
- X#include "oflags.h"
- X#include "verbs.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X NOTVAL(R)=(SAVEP.EQ.V).AND.(OTVAL(R).LE.0)
- XC VALUAC, PAGE 2
- XC
- X F=.TRUE.
- XC !ASSUME NO ACTIONS.
- X I=579
- XC !ASSUME NOT LIT.
- X IF(.NOT.LIT(HERE)) GO TO 4000
- XC !IF NOT LIT, PUNT.
- X I=677
- XC !ASSUME WRONG VERB.
- X SAVEP=PRSO
- XC !SAVE PRSO.
- X SAVEH=HERE
- XC !SAVE HERE.
- XC
- X100 IF(PRSA.NE.TAKEW) GO TO 1000
- XC !TAKE EVERY/VALUA?
- X DO 500 PRSO=1,OLNT
- XC !LOOP THRU OBJECTS.
- X IF(.NOT.QHERE(PRSO,HERE).OR.
- X& (and(OFLAG1(PRSO),VISIBT).EQ.0).OR.
- X& (and(OFLAG2(PRSO),ACTRBT).NE.0).OR.
- X& NOTVAL(PRSO)) GO TO 500
- X IF((and(OFLAG1(PRSO),TAKEBT).EQ.0).AND.
- X& (and(OFLAG2(PRSO),TRYBT).EQ.0)) GO TO 500
- X F=.FALSE.
- X CALL RSPSUB(580,ODESC2(PRSO))
- X F1=TAKE(.TRUE.)
- X IF(SAVEH.NE.HERE) RETURN
- X500 CONTINUE
- X GO TO 3000
- XC
- X1000 IF(PRSA.NE.DROPW) GO TO 2000
- XC !DROP EVERY/VALUA?
- X DO 1500 PRSO=1,OLNT
- X IF((OADV(PRSO).NE.WINNER).OR.NOTVAL(PRSO))
- X& GO TO 1500
- X F=.FALSE.
- X CALL RSPSUB(580,ODESC2(PRSO))
- X F1=DROP(.TRUE.)
- X IF(SAVEH.NE.HERE) RETURN
- X1500 CONTINUE
- X GO TO 3000
- XC
- X2000 IF(PRSA.NE.PUTW) GO TO 3000
- XC !PUT EVERY/VALUA?
- X DO 2500 PRSO=1,OLNT
- XC !LOOP THRU OBJECTS.
- X IF((OADV(PRSO).NE.WINNER)
- X& .OR.(PRSO.EQ.PRSI).OR.NOTVAL(PRSO).OR.
- X& (and(OFLAG1(PRSO),VISIBT).EQ.0)) GO TO 2500
- X F=.FALSE.
- X CALL RSPSUB(580,ODESC2(PRSO))
- X F1=PUT(.TRUE.)
- X IF(SAVEH.NE.HERE) RETURN
- X2500 CONTINUE
- XC
- X3000 I=581
- X IF(SAVEP.EQ.V) I=582
- XC !CHOOSE MESSAGE.
- X4000 IF(F) CALL RSPEAK(I)
- XC !IF NOTHING, REPORT.
- X RETURN
- X END
- END_OF_dverb1.F
- if test 6815 -ne `wc -c <dverb1.F`; then
- echo shar: \"dverb1.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f np.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"np.F\"
- else
- echo shar: Extracting \"np.F\" \(4769 characters\)
- sed "s/^X//" >np.F <<'END_OF_np.F'
- XC RDLINE- READ INPUT LINE
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE RDLINE(BUFFER,LENGTH,WHO)
- X IMPLICIT INTEGER(A-Z)
- X CHARACTER BUFFER(78)
- X#ifndef PDP
- X character*78 sysbuf
- X#endif
- X#include "parser.h"
- X#include "io.h"
- X
- X#ifdef PDP
- X5 if (WHO .eq. 1) call prompt
- XC read a line of input
- X90 call rdlin(BUFFER,LENGTH,WHO)
- X#else
- X5 GO TO (90,10),WHO+1
- XC !SEE WHO TO PROMPT FOR.
- X10 WRITE(OUTCH,50)
- XC !PROMPT FOR GAME.
- X50 FORMAT(' >',$)
- X
- X90 READ(INPCH,100) BUFFER
- X100 FORMAT(78A1)
- X
- X DO 200 LENGTH=78,1,-1
- X IF(BUFFER(LENGTH).NE.' ') GO TO 250
- X200 CONTINUE
- X GO TO 5
- XC !TRY AGAIN.
- X
- XC
- XC check for shell escape here before things are
- XC converted to upper case
- XC
- X250 if (buffer(1) .ne. '!') go to 300
- X do 275 j=2,length
- X sysbuf(j-1:j-1) = buffer(j)
- X275 continue
- X sysbuf(j:j) = char(0)
- X call system(sysbuf)
- X go to 5
- X
- XC CONVERT TO UPPER CASE
- X300 DO 400 I=1,LENGTH
- X IF(and((BUFFER(I).GE.'a'),(BUFFER(I).LE.'z')))
- X& BUFFER(I)=char(ichar(BUFFER(I))-32)
- X400 CONTINUE
- X#endif PDP
- X
- X if(LENGTH.EQ.0) GO TO 5
- X PRSCON=1
- XC !RESTART LEX SCAN.
- X RETURN
- X END
- XC PARSE- TOP LEVEL PARSE ROUTINE
- XC
- XC DECLARATIONS
- XC
- XC THIS ROUTINE DETAILS ON BIT 0 OF PRSFLG
- XC
- X LOGICAL FUNCTION PARSE(INBUF,INLNT,VBFLAG)
- X IMPLICIT INTEGER(A-Z)
- X CHARACTER INBUF(78)
- X LOGICAL LEX,SYNMCH,VBFLAG
- X INTEGER OUTBUF(40)
- X#include "debug.h"
- X#include "parser.h"
- X#include "xsrch.h"
- XC
- X#ifdef debug
- X DFLAG=and(PRSFLG,1).NE.0
- X#endif
- X PARSE=.FALSE.
- XC !ASSUME FAILS.
- X PRSA=0
- XC !ZERO OUTPUTS.
- X PRSI=0
- X PRSO=0
- XC
- X#ifdef PDP
- XC LEX recoded in C for pdp version (see lex.c)
- X if(.not. lex(INBUF,INLNT,OUTBUF,OUTLNT,VBFLAG,PRSCON)) goto 100
- X#else
- X IF(.NOT.LEX(INBUF,INLNT,OUTBUF,OUTLNT,VBFLAG)) GO TO 100
- X#endif
- X IF(SPARSE(OUTBUF,OUTLNT,VBFLAG)) 100,200,300
- XC !DO SYN SCAN.
- XC
- XC PARSE REQUIRES VALIDATION
- XC
- X200 IF(.NOT.VBFLAG) GO TO 350
- XC !ECHO MODE, FORCE FAIL.
- X IF(.NOT.SYNMCH(X)) GO TO 100
- XC !DO SYN MATCH.
- X IF(and((PRSO.GT.0),(PRSO.LT.XMIN))) LASTIT=PRSO
- XC
- XC SUCCESSFUL PARSE OR SUCCESSFUL VALIDATION
- XC
- X300 PARSE=.TRUE.
- X350 CALL ORPHAN(0,0,0,0,0)
- XC !CLEAR ORPHANS.
- X#ifdef debug
- X if(dflag) write(0,*) "parse good"
- X IF(DFLAG) PRINT 10,PARSE,PRSA,PRSO,PRSI
- X10 FORMAT(' PARSE RESULTS- ',L7,3I7)
- X#endif
- X RETURN
- XC
- XC PARSE FAILS, DISALLOW CONTINUATION
- XC
- X100 PRSCON=1
- X#ifdef debug
- X if(dflag) write(0,*) "parse failed"
- X IF(DFLAG) PRINT 10,PARSE,PRSA,PRSO,PRSI
- X#endif
- X RETURN
- XC
- X END
- XC ORPHAN- SET UP NEW ORPHANS
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE ORPHAN(O1,O2,O3,O4,O5)
- X IMPLICIT INTEGER(A-Z)
- X COMMON /ORPHS/ A,B,C,D,E
- XC
- X A=O1
- XC !SET UP NEW ORPHANS.
- X B=O2
- X C=O3
- X D=O4
- X E=O5
- X RETURN
- X END
- X#ifndef PDP
- XC LEX- LEXICAL ANALYZER
- XC
- XC
- XC THIS ROUTINE DETAILS ON BIT 1 OF PRSFLAG
- XC
- X LOGICAL FUNCTION LEX(INBUF,INLNT,OUTBUF,OP,VBFLAG)
- X IMPLICIT INTEGER(A-Z)
- X CHARACTER INBUF(78),J,DLIMIT(9)
- X INTEGER OUTBUF(40)
- X LOGICAL VBFLAG
- X#include "parser.h"
- XC
- X#include "debug.h"
- XC
- X DATA DLIMIT/'A','Z',o'100','1','9',o'22','-','-',o'22'/
- XC
- X DO 100 I=1,40
- XC !CLEAR OUTPUT BUF.
- X OUTBUF(I)=0
- X100 CONTINUE
- XC
- X#ifdef debug
- X DFLAG=and(PRSFLG,2).NE.0
- X#endif debug
- X LEX=.FALSE.
- XC !ASSUME LEX FAILS.
- X OP=-1
- XC !OUTPUT PTR.
- X50 OP=OP+2
- XC !ADV OUTPUT PTR.
- X CP=0
- XC !CHAR PTR=0.
- XC
- X200 IF(PRSCON.GT.INLNT) GO TO 1000
- XC !END OF INPUT?
- X J=INBUF(PRSCON)
- XC !NO, GET CHARACTER,
- X PRSCON=PRSCON+1
- XC !ADVANCE PTR.
- X IF(J.EQ.'.') GO TO 1000
- XC !END OF COMMAND?
- X IF(J.EQ.',') GO TO 1000
- XC !END OF COMMAND?
- X IF(J.EQ.' ') GO TO 6000
- XC !SPACE?
- X DO 500 I=1,9,3
- XC !SCH FOR CHAR.
- X IF(and((J.GE.DLIMIT(I)),(J.LE.DLIMIT(I+1))))
- X& GO TO 4000
- X500 CONTINUE
- XC
- X IF(VBFLAG) CALL RSPEAK(601)
- XC !GREEK TO ME, FAIL.
- X RETURN
- XC
- XC END OF INPUT, SEE IF PARTIAL WORD AVAILABLE.
- XC
- X1000 IF(PRSCON.GT.INLNT) PRSCON=1
- XC !FORCE PARSE RESTART.
- X IF(and((CP.EQ.0),(OP.EQ.1))) RETURN
- X IF(CP.EQ.0) OP=OP-2
- XC !ANY LAST WORD?
- X LEX=.TRUE.
- X#ifdef debug
- X IF(DFLAG) PRINT 10,CP,OP,PRSCON,(OUTBUF(I),I=1,OP+1)
- X10 FORMAT(' LEX RESULTS- ',3I7/1X,10O7)
- X#endif debug
- X RETURN
- XC
- XC LEGITIMATE CHARACTERS: LETTER, DIGIT, OR HYPHEN.
- XC
- X4000 J1=ichar(J)-ichar(DLIMIT(I+2))
- X#ifdef debug
- X IF(DFLAG) PRINT 20,J,J1,CP
- X20 FORMAT(' LEX- CHAR= ',3I7)
- X#endif debug
- X IF(CP.GE.6) GO TO 200
- XC !IGNORE IF TOO MANY CHAR.
- X K=OP+(CP/3)
- XC !COMPUTE WORD INDEX.
- X GO TO (4100,4200,4300),(MOD(CP,3)+1)
- XC !BRANCH ON CHAR.
- X4100 J2=J1*780
- XC !CHAR 1... *780
- X OUTBUF(K)=OUTBUF(K)+J2+J2
- XC !*1560 (40 ADDED BELOW).
- X4200 OUTBUF(K)=OUTBUF(K)+(J1*39)
- XC !*39 (1 ADDED BELOW).
- X4300 OUTBUF(K)=OUTBUF(K)+J1
- XC !*1.
- X CP=CP+1
- X GO TO 200
- XC !GET NEXT CHAR.
- XC
- XC SPACE
- XC
- X6000 IF(CP.EQ.0) GO TO 200
- XC !ANY WORD YET?
- X GO TO 50
- XC !YES, ADV OP.
- XC
- X END
- X#endif PDP
- END_OF_np.F
- if test 4769 -ne `wc -c <np.F`; then
- echo shar: \"np.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f np2.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"np2.F\"
- else
- echo shar: Extracting \"np2.F\" \(4830 characters\)
- sed "s/^X//" >np2.F <<'END_OF_np2.F'
- XC GETOBJ-- FIND OBJ DESCRIBED BY ADJ, NAME PAIR
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- XC THIS ROUTINE DETAILS ON BIT 3 OF PRSFLG
- XC
- X INTEGER FUNCTION GETOBJ(OIDX,AIDX,SPCOBJ)
- X IMPLICIT INTEGER(A-Z)
- X LOGICAL THISIT,GHERE,LIT,CHOMP
- X#include "parser.h"
- X#include "gamestate.h"
- XC
- XC MISCELLANEOUS VARIABLES
- XC
- X COMMON /STAR/ MBASE,STRBIT
- X#include "debug.h"
- X#include "objects.h"
- X#include "oflags.h"
- X#include "advers.h"
- X#include "vocab.h"
- XC GETOBJ, PAGE 2
- XC
- X#ifdef debug
- X DFLAG=and(PRSFLG, 8).NE.0
- X#endif debug
- X CHOMP=.FALSE.
- X AV=AVEHIC(WINNER)
- X OBJ=0
- XC !ASSUME DARK.
- X IF(.NOT.LIT(HERE)) GO TO 200
- XC !LIT?
- XC
- X OBJ=SCHLST(OIDX,AIDX,HERE,0,0,SPCOBJ)
- XC !SEARCH ROOM.
- X#ifdef debug
- X IF(DFLAG) PRINT 10,OBJ
- X10 FORMAT(' SCHLST- ROOM SCH ',I6)
- X#endif debug
- X IF(OBJ) 1000,200,100
- XC !TEST RESULT.
- X100 IF((AV.EQ.0).OR.(AV.EQ.OBJ).OR.
- X& (and(OFLAG2(OBJ),FINDBT).NE.0)) GO TO 200
- X IF(OCAN(OBJ).EQ.AV) GO TO 200
- XC !TEST IF REACHABLE.
- X CHOMP=.TRUE.
- XC !PROBABLY NOT.
- XC
- X200 IF(AV.EQ.0) GO TO 400
- XC !IN VEHICLE?
- X NOBJ=SCHLST(OIDX,AIDX,0,AV,0,SPCOBJ)
- XC !SEARCH VEHICLE.
- X#ifdef debug
- X IF(DFLAG) PRINT 20,NOBJ
- X20 FORMAT(' SCHLST- VEH SCH ',I6)
- X#endif debug
- X IF(NOBJ) 1100,400,300
- XC !TEST RESULT.
- X300 CHOMP=.FALSE.
- XC !REACHABLE.
- X IF(OBJ.EQ.NOBJ) GO TO 400
- XC !SAME AS BEFORE?
- X IF(OBJ.NE.0) NOBJ=-NOBJ
- XC !AMB RESULT?
- X OBJ=NOBJ
- XC
- X400 NOBJ=SCHLST(OIDX,AIDX,0,0,WINNER,SPCOBJ)
- XC !SEARCH ADVENTURER.
- X#ifdef debug
- X IF(DFLAG) PRINT 30,NOBJ
- X30 FORMAT(' SCHLST- ADV SCH ',I6)
- X#endif debug
- X IF(NOBJ) 1100,600,500
- XC !TEST RESULT
- X500 IF(OBJ.NE.0) NOBJ=-NOBJ
- XC !AMB RESULT?
- X1100 OBJ=NOBJ
- XC !RETURN NEW OBJECT.
- X600 IF(CHOMP) OBJ=-10000
- XC !UNREACHABLE.
- X1000 GETOBJ=OBJ
- XC
- X IF(GETOBJ.NE.0) GO TO 1500
- XC !GOT SOMETHING?
- X DO 1200 I=STRBIT+1,OLNT
- XC !NO, SEARCH GLOBALS.
- X IF(.NOT.THISIT(OIDX,AIDX,I,SPCOBJ)) GO TO 1200
- X IF(.NOT.GHERE(I,HERE)) GO TO 1200
- XC !CAN IT BE HERE?
- X IF(GETOBJ.NE.0) GETOBJ=-I
- XC !AMB MATCH?
- X IF(GETOBJ.EQ.0) GETOBJ=I
- X1200 CONTINUE
- XC
- X1500 CONTINUE
- XC !END OF SEARCH.
- X#ifdef debug
- X IF(DFLAG) PRINT 40,GETOBJ
- X40 FORMAT(' SCHLST- RESULT ',I6)
- X#endif debug
- X RETURN
- X END
- XC SCHLST-- SEARCH FOR OBJECT
- XC
- XC DECLARATIONS
- XC
- X INTEGER FUNCTION SCHLST(OIDX,AIDX,RM,CN,AD,SPCOBJ)
- X IMPLICIT INTEGER(A-Z)
- X LOGICAL THISIT,QHERE,NOTRAN,NOVIS
- XC
- X COMMON /STAR/ MBASE,STRBIT
- X#include "objects.h"
- X#include "oflags.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X NOTRAN(O)=(and(OFLAG1(O),TRANBT).EQ.0).AND.
- X& (and(OFLAG2(O),OPENBT).EQ.0)
- X NOVIS(O)=(and(OFLAG1(O),VISIBT).EQ.0)
- XC
- X SCHLST=0
- XC !NO RESULT.
- X DO 1000 I=1,OLNT
- XC !SEARCH OBJECTS.
- X IF(NOVIS(I).OR.
- X& (((RM.EQ.0).OR.(.NOT.QHERE(I,RM))).AND.
- X& ((CN.EQ.0).OR.(OCAN(I).NE.CN)).AND.
- X& ((AD.EQ.0).OR.(OADV(I).NE.AD)))) GO TO 1000
- X IF(.NOT.THISIT(OIDX,AIDX,I,SPCOBJ)) GO TO 200
- X IF(SCHLST.NE.0) GO TO 2000
- XC !GOT ONE ALREADY?
- X SCHLST=I
- XC !NO.
- XC
- XC IF OPEN OR TRANSPARENT, SEARCH THE OBJECT ITSELF.
- XC
- X200 IF(NOTRAN(I)) GO TO 1000
- XC
- XC SEARCH IS CONDUCTED IN REVERSE. ALL OBJECTS ARE CHECKED TO
- XC SEE IF THEY ARE AT SOME LEVEL OF CONTAINMENT INSIDE OBJECT 'I'.
- XC IF THEY ARE AT LEVEL 1, OR IF ALL LINKS IN THE CONTAINMENT
- XC CHAIN ARE OPEN, VISIBLE, AND HAVE SEARCHME SET, THEY CAN QUALIFY
- XC AS A POTENTIAL MATCH.
- XC
- X DO 500 J=1,OLNT
- XC !SEARCH OBJECTS.
- X IF(NOVIS(J).OR. (.NOT.THISIT(OIDX,AIDX,J,SPCOBJ)))
- X& GO TO 500
- X X=OCAN(J)
- XC !GET CONTAINER.
- X300 IF(X.EQ.I) GO TO 400
- XC !INSIDE TARGET?
- X IF(X.EQ.0) GO TO 500
- XC !INSIDE ANYTHING?
- X IF(NOVIS(X).OR.NOTRAN(X).OR.
- X& (and(OFLAG2(X),SCHBT).EQ.0)) GO TO 500
- X X=OCAN(X)
- XC !GO ANOTHER LEVEL.
- X GO TO 300
- XC
- X400 IF(SCHLST.NE.0) GO TO 2000
- XC !ALREADY GOT ONE?
- X SCHLST=J
- XC !NO.
- X500 CONTINUE
- XC
- X1000 CONTINUE
- X RETURN
- XC
- X2000 SCHLST=-SCHLST
- XC !AMB RETURN.
- X RETURN
- XC
- X END
- XC
- XC THISIT-- VALIDATE OBJECT VS DESCRIPTION
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION THISIT(OIDX,AIDX,OBJ,SPCOBJ)
- X IMPLICIT INTEGER(A-Z)
- X LOGICAL NOTEST
- X#include "vocab.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X NOTEST(O)=(O.LE.0).OR.(O.GE.R50MIN)
- XC
- XC THE FOLLOWING DATA STATEMENT USED RADIX-50 NOTATION (R50MIN/1RA/)
- XC IN RADIX-50 NOTATION, AN "A" IN THE FIRST POSITION IS
- XC ENCODED AS 1*40*40 = 1600.
- XC
- X DATA R50MIN/1600/
- XC
- X THISIT=.FALSE.
- XC !ASSUME NO MATCH.
- X IF((SPCOBJ.NE.0).AND.(OBJ.EQ.SPCOBJ)) GO TO 500
- XC
- XC CHECK FOR OBJECT NAMES
- XC
- X I=OIDX+1
- X100 I=I+1
- X IF(NOTEST(OVOC(I))) RETURN
- XC !IF DONE, LOSE.
- X IF(OVOC(I).NE.OBJ) GO TO 100
- XC !IF FAIL, CONT.
- XC
- X IF(AIDX.EQ.0) GO TO 500
- XC !ANY ADJ?
- X I=AIDX+1
- X200 I=I+1
- X IF(NOTEST(AVOC(I))) RETURN
- XC !IF DONE, LOSE.
- X IF(AVOC(I).NE.OBJ) GO TO 200
- XC !IF FAIL, CONT.
- XC
- X500 THISIT=.TRUE.
- X RETURN
- X END
- END_OF_np2.F
- if test 4830 -ne `wc -c <np2.F`; then
- echo shar: \"np2.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f nrooms.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"nrooms.F\"
- else
- echo shar: Extracting \"nrooms.F\" \(6745 characters\)
- sed "s/^X//" >nrooms.F <<'END_OF_nrooms.F'
- XC RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2
- XC
- XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
- XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
- XC WRITTEN BY R. M. SUPNIK
- XC
- XC DECLARATIONS
- XC
- X LOGICAL FUNCTION RAPPL2(RI)
- X IMPLICIT INTEGER (A-Z)
- X LOGICAL QOPEN,QHERE
- X#include "parser.h"
- X#include "gamestate.h"
- X#include "state.h"
- X#include "io.h"
- X#include "rooms.h"
- X#include "rflag.h"
- X#include "rindex.h"
- X#include "objects.h"
- X#include "oflags.h"
- X#include "oindex.h"
- X#include "xsrch.h"
- X#include "clock.h"
- X#include "advers.h"
- X#include "verbs.h"
- X#include "flags.h"
- XC
- XC FUNCTIONS AND DATA
- XC
- X QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
- X DATA NEWRMS/38/
- XC RAPPL2, PAGE 2
- XC
- X RAPPL2=.TRUE.
- X GO TO (38000,39000,40000,41000,42000,43000,44000,
- X& 45000,46000,47000,48000,49000,50000,
- X& 51000,52000,53000,54000,55000,56000,
- X& 57000,58000,59000,60000),
- X& (RI-NEWRMS+1)
- X CALL BUG(70,RI)
- X RETURN
- XC
- XC R38-- MIRROR D ROOM
- XC
- X38000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(FDOOR,MRG,0,682,681)
- X RETURN
- XC
- XC R39-- MIRROR G ROOM
- XC
- X39000 IF(PRSA.EQ.WALKIW) CALL JIGSUP(685)
- X RETURN
- XC
- XC R40-- MIRROR C ROOM
- XC
- X40000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRG,MRB,683,0,681)
- X RETURN
- XC
- XC R41-- MIRROR B ROOM
- XC
- X41000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRC,MRA,0,0,681)
- X RETURN
- XC
- XC R42-- MIRROR A ROOM
- XC
- X42000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRB,0,0,684,681)
- X RETURN
- XC RAPPL2, PAGE 3
- XC
- XC R43-- MIRROR C EAST/WEST
- XC
- X43000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,683)
- X RETURN
- XC
- XC R44-- MIRROR B EAST/WEST
- XC
- X44000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,686)
- X RETURN
- XC
- XC R45-- MIRROR A EAST/WEST
- XC
- X45000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,687)
- X RETURN
- XC
- XC R46-- INSIDE MIRROR
- XC
- X46000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(688)
- XC !DESCRIBE
- XC
- XC NOW DESCRIBE POLE STATE.
- XC
- XC CASES 1,2-- MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE
- XC CASES 3,4-- MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL
- XC CASE 5-- POLE IS UP
- XC
- X I=689
- XC !ASSUME CASE 5.
- X IF((MDIR.EQ.270).AND.(MLOC.EQ.MRB))
- X& I=690+MIN0(POLEUF,1)
- X IF(MOD(MDIR,180).EQ.0)
- X& I=692+MIN0(POLEUF,1)
- X CALL RSPEAK(I)
- XC !DESCRIBE POLE.
- X CALL RSPSUB(694,695+(MDIR/45))
- XC !DESCRIBE ARROW.
- X RETURN
- XC RAPPL2, PAGE 4
- XC
- XC R47-- MIRROR EYE ROOM
- XC
- X47000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=704
- XC !ASSUME BEAM STOP.
- X DO 47100 J=1,OLNT
- X IF(QHERE(J,HERE).AND.(J.NE.RBEAM)) GO TO 47200
- X47100 CONTINUE
- X I=703
- X47200 CALL RSPSUB(I,ODESC2(J))
- XC !DESCRIBE BEAM.
- X CALL LOOKTO(MRA,0,0,0,0)
- XC !LOOK NORTH.
- X RETURN
- XC
- XC R48-- INSIDE CRYPT
- XC
- X48000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=46
- XC !CRYPT IS OPEN/CLOSED.
- X IF(QOPEN(TOMB)) I=12
- X CALL RSPSUB(705,I)
- X RETURN
- XC
- XC R49-- SOUTH CORRIDOR
- XC
- X49000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL RSPEAK(706)
- XC !DESCRIBE.
- X I=46
- XC !ODOOR IS OPEN/CLOSED.
- X IF(QOPEN(ODOOR)) I=12
- X IF(LCELL.EQ.4) CALL RSPSUB(707,I)
- XC !DESCRIBE ODOOR IF THERE.
- X RETURN
- XC
- XC R50-- BEHIND DOOR
- XC
- X50000 IF(PRSA.NE.WALKIW) GO TO 50100
- XC !WALK IN?
- X CFLAG(CEVFOL)=.TRUE.
- XC !MASTER FOLLOWS.
- X CTICK(CEVFOL)=-1
- X RETURN
- XC
- X50100 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=46
- XC !QDOOR IS OPEN/CLOSED.
- X IF(QOPEN(QDOOR)) I=12
- X CALL RSPSUB(708,I)
- X RETURN
- XC RAPPL2, PAGE 5
- XC
- XC R51-- FRONT DOOR
- XC
- X51000 IF(PRSA.EQ.WALKIW) CTICK(CEVFOL)=0
- XC !IF EXITS, KILL FOLLOW.
- X IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X CALL LOOKTO(0,MRD,709,0,0)
- XC !DESCRIBE SOUTH.
- X I=46
- XC !PANEL IS OPEN/CLOSED.
- X IF(INQSTF) I=12
- XC !OPEN IF INQ STARTED.
- X J=46
- XC !QDOOR IS OPEN/CLOSED.
- X IF(QOPEN(QDOOR)) J=12
- X CALL RSPSB2(710,I,J)
- X RETURN
- XC
- XC R52-- NORTH CORRIDOR
- XC
- X52000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=46
- X IF(QOPEN(CDOOR)) I=12
- XC !CDOOR IS OPEN/CLOSED.
- X CALL RSPSUB(711,I)
- X RETURN
- XC
- XC R53-- PARAPET
- XC
- X53000 IF(PRSA.EQ.LOOKW) CALL RSPSUB(712,712+PNUMB)
- X RETURN
- XC
- XC R54-- CELL
- XC
- X54000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=721
- XC !CDOOR IS OPEN/CLOSED.
- X IF(QOPEN(CDOOR)) I=722
- X CALL RSPEAK(I)
- X I=46
- XC !ODOOR IS OPEN/CLOSED.
- X IF(QOPEN(ODOOR)) I=12
- X IF(LCELL.EQ.4) CALL RSPSUB(723,I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R55-- PRISON CELL
- XC
- X55000 IF(PRSA.EQ.LOOKW) CALL RSPEAK(724)
- XC !LOOK?
- X RETURN
- XC
- XC R56-- NIRVANA CELL
- XC
- X56000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=46
- XC !ODOOR IS OPEN/CLOSED.
- X IF(QOPEN(ODOOR)) I=12
- X CALL RSPSUB(725,I)
- X RETURN
- XC RAPPL2, PAGE 6
- XC
- XC R57-- NIRVANA AND END OF GAME
- XC
- X57000 IF(PRSA.NE.WALKIW) RETURN
- XC !WALKIN?
- X CALL RSPEAK(726)
- X CALL SCORE(.FALSE.)
- XC moved to exit routine CLOSE(DBCH)
- X CALL EXIT
- XC
- XC R58-- TOMB ROOM
- XC
- X58000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=46
- XC !TOMB IS OPEN/CLOSED.
- X IF(QOPEN(TOMB)) I=12
- X CALL RSPSUB(792,I)
- X RETURN
- XC
- XC R59-- PUZZLE SIDE ROOM
- XC
- X59000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X I=861
- XC !ASSUME DOOR CLOSED.
- X IF(CPOUTF) I=862
- XC !OPEN?
- X CALL RSPEAK(I)
- XC !DESCRIBE.
- X RETURN
- XC
- XC R60-- PUZZLE ROOM
- XC
- X60000 IF(PRSA.NE.LOOKW) RETURN
- XC !LOOK?
- X IF(CPUSHF) GO TO 60100
- XC !STARTED PUZZLE?
- X CALL RSPEAK(868)
- XC !NO, DESCRIBE.
- X IF(and(OFLAG2(WARNI),TCHBT).NE.0) CALL RSPEAK(869)
- X RETURN
- XC
- X60100 CALL CPINFO(880,CPHERE)
- XC !DESCRIBE ROOM.
- X RETURN
- XC
- X END
- XC LOOKTO-- DESCRIBE VIEW IN MIRROR HALLWAY
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE LOOKTO(NRM,SRM,NT,ST,HT)
- X IMPLICIT INTEGER(A-Z)
- X#include "gamestate.h"
- X#include "flags.h"
- XC LOOKTO, PAGE 2
- XC
- X CALL RSPEAK(HT)
- XC !DESCRIBE HALL.
- X CALL RSPEAK(NT)
- XC !DESCRIBE NORTH VIEW.
- X CALL RSPEAK(ST)
- XC !DESCRIBE SOUTH VIEW.
- X DIR=0
- XC !ASSUME NO DIRECTION.
- X IF(IABS(MLOC-HERE).NE.1) GO TO 200
- XC !MIRROR TO N OR S?
- X IF(MLOC.EQ.NRM) DIR=695
- X IF(MLOC.EQ.SRM) DIR=699
- XC !DIR=N/S.
- X IF(MOD(MDIR,180).NE.0) GO TO 100
- XC !MIRROR N-S?
- X CALL RSPSUB(847,DIR)
- XC !YES, HE SEES PANEL
- X CALL RSPSB2(848,DIR,DIR)
- XC !AND NARROW ROOMS.
- X GO TO 200
- XC
- X100 M1=MRHERE(HERE)
- XC !WHICH MIRROR?
- X MRBF=0
- XC !ASSUME INTACT.
- X IF(((M1.EQ.1).AND..NOT.MR1F).OR.
- X& ((M1.EQ.2).AND..NOT.MR2F)) MRBF=1
- X CALL RSPSUB(849+MRBF,DIR)
- XC !DESCRIBE.
- X IF((M1.EQ.1).AND.MROPNF) CALL RSPEAK(823+MRBF)
- X IF(MRBF.NE.0) CALL RSPEAK(851)
- XC
- X200 I=0
- XC !ASSUME NO MORE TO DO.
- X IF((NT.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.699))) I=852
- X IF((ST.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.695))) I=853
- X IF((NT+ST+DIR).EQ.0) I=854
- X IF(HT.NE.0) CALL RSPEAK(I)
- XC !DESCRIBE HALLS.
- X RETURN
- XC
- X END
- XC EWTELL-- DESCRIBE E/W NARROW ROOMS
- XC
- XC DECLARATIONS
- XC
- X SUBROUTINE EWTELL(RM,ST)
- X IMPLICIT INTEGER(A-Z)
- X LOGICAL M1
- XC
- XC ROOMS
- X#include "rindex.h"
- X#include "flags.h"
- XC EWTELL, PAGE 2
- XC
- XC NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND
- XC MIRROR MUST BE N-S.
- XC
- X M1=(MDIR+(MOD(RM-MRAE,2)*180)).EQ.180
- X I=819+MOD(RM-MRAE,2)
- XC !GET BASIC E/W STRING.
- X IF((M1.AND..NOT.MR1F).OR.(.NOT.M1.AND..NOT.MR2F))
- X& I=I+2
- X CALL RSPEAK(I)
- X IF(M1.AND.MROPNF) CALL RSPEAK(823+((I-819)/2))
- X CALL RSPEAK(825)
- X CALL RSPEAK(ST)
- X RETURN
- XC
- X END
- END_OF_nrooms.F
- if test 6745 -ne `wc -c <nrooms.F`; then
- echo shar: \"nrooms.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f oflags.h -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"oflags.h\"
- else
- echo shar: Extracting \"oflags.h\" \(269 characters\)
- sed "s/^X//" >oflags.h <<'END_OF_oflags.h'
- XC
- X COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
- X& NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
- X& TOOLBT,TURNBT,ONBT
- X COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
- X& WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
- X& TCHBT,VEHBT,SCHBT
- END_OF_oflags.h
- if test 269 -ne `wc -c <oflags.h`; then
- echo shar: \"oflags.h\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f speak.F -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"speak.F\"
- else
- echo shar: Extracting \"speak.F\" \(3842 characters\)
- sed "s/^X//" >speak.F <<'END_OF_speak.F'
- X#include "files.h"
- X
- X#ifndef RTEXTFILE
- X#define RTEXTFILE '/usr/games/lib/dunlib/rtext.dat'
- X#endif
- X
- X#ifndef TEXTFILE
- X#define TEXTFILE '/usr/games/lib/dunlib/dtext.dat'
- X#endif
- X
- XC
- XC manual speak routine
- XC gets dungeon messages and prints them
- XC (only used for pdp version)
- XC
- X program speak
- X IMPLICIT INTEGER(A-Z)
- XC
- X COMMON /CHAN/ INPCH,OUTCH,DBCH
- X#include "mindex.h"
- XC
- XC load the lookup table
- XC
- X OPEN(UNIT=9,file=RTEXTFILE,
- X& status='OLD',IOSTAT=IO,
- X& FORM='formatted',ACCESS='SEQUENTIAL',err=50)
- XC
- X call load
- XC
- XC open the message file
- XC
- X DBCH=2
- XC
- X OPEN(UNIT=DBCH,file=TEXTFILE,
- X& status='OLD',IOSTAT=IO,
- X& FORM='UNFORMATTED',ACCESS='DIRECT',recl=76,err=60)
- XC
- X print 20
- X20 format('Sigh... '/)
- XC
- XC get numbers and call speaking program
- XC
- X10 continue
- XC
- X call inprd(mesage,i,j)
- X call RSPSB2(mesage,i,j)
- X goto 10
- XC
- XC INITIALIZATION ERROR
- XC
- X50 print 960
- X print 980
- X goto 99
- X60 print 970
- X print 980
- X goto 99
- X960 FORMAT(' I can''t open ',RTEXTFILE,'.')
- X970 FORMAT(' I can''t open ',TEXTFILE,'.')
- X980 FORMAT(' Suddenly a sinister, wraithlike figure appears before '
- X& 'you,'/' seeming to float in the air. In a low, sorrowful voice'
- X& ' he says,'/' "Alas, the very nature of the world has changed, '
- X& 'and the dungeon'/' cannot be found. All must now pass away."'
- X& ' Raising his oaken staff'/' in farewell, he fades into the '
- X& 'spreading darkness. In his place'/' appears a tastefully '
- X& 'lettered sign reading:'//23X,'INITIALIZATION FAILURE'//
- X& ' The darkness becomes all encompassing, and your vision fails.')
- X99 stop
- X end
- XC
- XC RSPSB2-- OUTPUT RANDOM MESSAGE WITH SUBSTITUTABLE ARGUMENTS
- XC
- XC CALLED BY--
- XC
- XC CALL RSPSB2(MSGNUM,S1,S2)
- XC
- X SUBROUTINE RSPSB2(A,B,C)
- X IMPLICIT INTEGER(A-Z)
- X CHARACTER*74 B1,B2,B3
- X INTEGER*2 OLDREC,NEWREC,JREC
- XC
- XC DECLARATIONS
- XC
- XC
- X COMMON /RMSG/ MLNT,RTEXT(1050)
- X COMMON /CHAN/ INPCH,OUTCH,DBCH
- XC
- XC CONVERT ALL ARGUMENTS FROM DICTIONARY NUMBERS (IF POSITIVE)
- XC TO ABSOLUTE RECORD NUMBERS.
- XC
- X X=A
- X Y=B
- X Z=C
- X IF(X.GT.0) X=RTEXT(X)
- X IF(Y.GT.0) Y=RTEXT(Y)
- X IF(Z.GT.0) Z=RTEXT(Z)
- X X=IABS(X)
- X Y=IABS(Y)
- X Z=IABS(Z)
- X IF(X.EQ.0) RETURN
- XC
- X READ(UNIT=DBCH,REC=X) OLDREC,B1
- XC
- X100 DO 150 I=1,74
- X X1=and(X,31)+I
- X B1(I:I)=char(xor(ichar(B1(I:I)),X1))
- X150 CONTINUE
- XC
- X200 IF(Y.EQ.0) GO TO 400
- X DO 300 I=1,74
- X IF(B1(I:I).EQ.'#') GO TO 1000
- X300 CONTINUE
- XC
- X400 DO 500 I=74,1,-1
- X IF(B1(I:I).NE.' ') GO TO 600
- X500 CONTINUE
- XC
- XC 600 WRITE(OUTCH,650) (B1(J:J),J=1,I)
- X600 PRINT 650, (B1(J:J),J=1,I)
- X650 FORMAT(1X,74A1)
- X X=X+1
- X READ(UNIT=DBCH,REC=X) NEWREC,B1
- X IF(OLDREC.EQ.NEWREC) GO TO 100
- X RETURN
- XC
- XC SUBSTITUTION WITH SUBSTITUTABLE AVAILABLE.
- XC I IS INDEX OF # IN B1.
- XC Y IS NUMBER OF RECORD TO SUBSTITUTE.
- XC
- XC PROCEDURE:
- XC 1) COPY REST OF B1 TO B2
- XC 2) READ SUBSTITUTABLE OVER B1
- XC 3) RESTORE TAIL OF ORIGINAL B1
- XC
- XC THE IMPLICIT ASSUMPTION HERE IS THAT THE SUBSTITUTABLE STRING
- XC IS VERY SHORT (i.e. MUCH LESS THAN ONE RECORD).
- XC
- X1000 K2=1
- X DO 1100 K1=I+1,74
- X B2(K2:K2)=B1(K1:K1)
- X K2=K2+1
- X1100 CONTINUE
- XC
- XC READ SUBSTITUTE STRING INTO B3, AND DECRYPT IT:
- XC
- X READ(UNIT=DBCH,REC=Y) JREC,B3
- X DO 1150 K1=1,74
- X X1=and(Y,31)+K1
- X B3(K1:K1)=char(xor(ICHAR(B3(K1:K1)),X1))
- X1150 CONTINUE
- XC
- XC FILL REMAINDER OF B1 WITH CHARACTERS FROM B3:
- XC
- X K2=1
- X DO 1180 K1=I,74
- X B1(K1:K1)=B3(K2:K2)
- X K2=K2+1
- X1180 CONTINUE
- XC
- XC FIND END OF SUBSTITUTE STRING IN B1:
- XC
- X DO 1200 J=74,1,-1
- X IF(B1(J:J).NE.' ') GO TO 1300
- X1200 CONTINUE
- XC
- XC PUT TAIL END OF B1 (NOW IN B2) BACK INTO B1 AFTER SUBSTITUTE STRING:
- XC
- X1300 K1=1
- X DO 1400 K2=J+1,74
- X B1(K2:K2)=B2(K1:K1)
- X K1=K1+1
- X1400 CONTINUE
- XC
- X Y=Z
- X Z=0
- X GO TO 200
- XC
- X END
- X SUBROUTINE LOAD
- X IMPLICIT INTEGER (A-Z)
- XC
- XC load rtext data
- XC
- XC
- XC MESSAGE INDEX
- XC
- X COMMON /RMSG/ MLNT,RTEXT(1050)
- XC
- XC
- X rewind 9
- XC
- XC load the data
- XC
- XC
- X READ(9,130) RTEXT
- X130 FORMAT(I8)
- X close(9)
- XC
- XC
- X return
- X END
- END_OF_speak.F
- if test 3842 -ne `wc -c <speak.F`; then
- echo shar: \"speak.F\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- echo shar: End of archive 6 \(of 14\).
- cp /dev/null ark6isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 14 archives.
- rm -f ark[1-9]isdone ark1[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-